package com.demo.java.OD451_500.OD451;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【小朋友来自多少小区(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146332234
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();  // 读取输入
        scanner.close();

        // 创建一个数组用于存储 garden 的数据
        int[] garden = new int[100];  // 假设最大值为 100
        int length = 0;

        // 将输入数据转换为整数并存储在 garden 数组中
        String[] tokens = input.split(" ");
        for (String token : tokens) {
            garden[length++] = Integer.parseInt(token);
        }

        // 对 garden 数组进行排序
        Arrays.sort(garden, 0, length);

        // 初始化结果和变量
        int result = 0, target = garden[0], count = 1;

        // 遍历 garden 数组，计算最少的小区数
        for (int i = 1; i < length; ++i) {
            if (garden[i] == target) {
                count++;  // 如果当前小区的朋友数与上一个相等，增加计数
            } else {
                // 计算已找到的区间的最小小区数
                result += (target + 1) * ((count + target) / (target + 1));
                target = garden[i];  // 更新目标小区
                count = 1;  // 重置计数器
            }
        }

        // 最后一组数据处理
        result += (target + 1) * ((count + target) / (target + 1));

        // 输出结果
        System.out.println(result);
    }
}